import AttributeUtil from '@/AttributeUtil';
import UnitEvent from '@/event/UnitEvent';

declare global {
    interface HeroLevelUpConfigModel {
        id: string;
        体力: number;
        力量: number;
        敏捷: number;
        智力: number;
        精神: number;
        体力成长: number;
        力量成长: number;
        敏捷成长: number;
        智力成长: number;
        精神成长: number;
    }
}

export default class LevelUpSystem {
    private config: { [key: string]: HeroLevelUpConfigModel } = {};
    constructor() {
        for (let key in this.config) {
            let 英雄升级配置 = this.config[key];
            let 属性 = AttributeUtil.getUnitTypeAttribute(key, true);
            属性.自定义敏捷 = 英雄升级配置.敏捷;
            属性.自定义智力 = 英雄升级配置.智力;
        }
        se.onHeroLevelUp(this.action);
    }
    action(this: void, e: UnitEvent) {
        let 属性 = AttributeUtil.getUnitAttribute(e.trigUnit, true);
        if (属性 == null) return;
        let 配置数据 = LevelUpSystemInstance.config[e.trigUnitTypeIdStr];
        if (配置数据 == null) return;
        属性.自定义敏捷 = (属性.自定义敏捷 ?? 0) + (配置数据.敏捷成长 ?? 0);
        属性.自定义智力 = (属性.自定义智力 ?? 0) + (配置数据.智力成长 ?? 0);
        属性.strength = (属性.strength ?? 0) + (配置数据.体力成长 ?? 0);
        属性.agility = (属性.agility ?? 0) + (配置数据.力量成长 ?? 0);
        属性.intelligence = (属性.intelligence ?? 0) + (配置数据.精神成长 ?? 0);
    }
    levelUp(英雄: unit, lv: number) {
        let 等级 = GetHeroLevel(英雄);
        let temp = lv - 等级;
        for (let i = 0; i < temp; i++) {
            SetHeroLevel(英雄, GetHeroLevel(英雄) + 1, true);
        }
    }
}
